读取特征数据

HealthKit 中的 特征数据 指的是用户个人的静态属性,如出生日期、生物性别、血型、皮肤类型、是否使用轮椅,以及活动移动模式等。这些信息通常由用户在“健康”App 中设置,属于只读数据。

Scripting 提供了一系列 全局异步 API 来读取这些数据。


支持读取的特征

特征名称 API 调用方式 返回类型
出生日期 await Health.dateOfBirth() DateComponents
生物性别 await Health.biologicalSex() HealthBiologicalSex 枚举
血型 await Health.bloodType() HealthBloodType 枚举
皮肤类型(Fitzpatrick) await Health.fitzpatrickSkinType() HealthFitzpatrickSkinType 枚举
是否使用轮椅 await Health.wheelchairUse() HealthWheelchairUse 枚举
活动移动模式 await Health.activityMoveMode() HealthActivityMoveMode 枚举

1. 读取出生日期

1const birthDate = await Health.dateOfBirth()
2console.log(`出生日期:${birthDate.year}${birthDate.month}${birthDate.day}`)

返回值为 DateComponents 对象,例如:

1{
2  year: 1989,
3  month: 7,
4  day: 4
5}

2. 读取生物性别

1const sex = await Health.biologicalSex()
2
3switch (sex) {
4  case HealthBiologicalSex.female:
5    console.log("女性")
6    break
7  case HealthBiologicalSex.male:
8    console.log("男性")
9    break
10  case HealthBiologicalSex.other:
11    console.log("其他")
12    break
13  case HealthBiologicalSex.notSet:
14    console.log("未设置")
15    break
16}

3. 读取血型

1const blood = await Health.bloodType()
2
3switch (blood) {
4  case HealthBloodType.aPositive:
5    console.log("A型阳性")
6    break
7  case HealthBloodType.oNegative:
8    console.log("O型阴性")
9    break
10  // 可补充更多类型
11  default:
12    console.log("未设置")
13}

4. 读取皮肤类型(Fitzpatrick)

1const skinType = await Health.fitzpatrickSkinType()
2
3switch (skinType) {
4  case HealthFitzpatrickSkinType.I:
5    console.log("类型 I:非常白")
6    break
7  case HealthFitzpatrickSkinType.VI:
8    console.log("类型 VI:深褐色至黑色")
9    break
10  default:
11    console.log("未设置")
12}

5. 判断是否使用轮椅

1const wheelchair = await Health.wheelchairUse()
2
3if (wheelchair === HealthWheelchairUse.yes) {
4  console.log("用户使用轮椅")
5} else if (wheelchair === HealthWheelchairUse.no) {
6  console.log("用户不使用轮椅")
7} else {
8  console.log("未设置")
9}

6. 读取活动移动模式

1const mode = await Health.activityMoveMode()
2
3if (mode === HealthActivityMoveMode.activeEnergy) {
4  console.log("通过活跃能量追踪活动")
5} else if (mode === HealthActivityMoveMode.appleMoveTime) {
6  console.log("通过 Apple Move Time 追踪活动")
7}

错误处理

如果:

  • 用户未设置该特征;
  • 没有获取权限;
  • 设备不支持 HealthKit;

调用 API 时可能抛出异常。建议使用 try/catch 进行捕获:

1try {
2  const sex = await Health.biologicalSex()
3  console.log(sex)
4} catch (err) {
5  console.error("读取生物性别失败:", err)
6}

总结

你可以通过以下全局 API 读取用户的静态健康特征:

1await Health.dateOfBirth()
2await Health.biologicalSex()
3await Health.bloodType()
4await Health.fitzpatrickSkinType()
5await Health.wheelchairUse()
6await Health.activityMoveMode()

这些值来源于用户在健康 App 中的个人设置,通常不会频繁变化。请注意处理未设置或读取失败的情况。